import Util from './ts/util.js' // 因为 TypeScript 会将 .ts 文件编译为 .js 文件，所以在导入时应使用编译后的扩展名
import SystemDemo from './ts/systemdemo.js'
import { init_turbine } from './ts/calculate.js'
import { registerFunction } from '@/components/registerFunction.js'

function calculateArea(length, width) {
  return length * width
}

/**
 * WPS插件加载入口函数
 * @param {object} ribbonUI - WPS提供的Ribbon UI对象
 * @returns {boolean} 总是返回true表示加载成功
 *
 * 功能说明：
 * 1. 初始化插件全局变量
 * 2. 设置WPS枚举值
 * 3. 暴露系统调用接口
 */
function OnAddinLoad(ribbonUI) {
  console.log('开始加载wpsjs插件')

  if (typeof (window.Application.Enum) != 'object') { // 如果没有内置枚举值
    window.Application.Enum = Util.WPS_Enum
  }

  //这几个导出函数是给外部业务系统调用的
  window.openOfficeFileFromSystemDemo = SystemDemo.openOfficeFileFromSystemDemo
  window.InvokeFromSystemDemo = SystemDemo.InvokeFromSystemDemo

  // 在插件存储中设置测试标记，用于控制ApiEvent按钮的显示状态
  window.Application.PluginStorage.setItem('test', false)
  registerFunction(Application) // 注册自定义函数到WPS中，相当于VBA中的函数定义
  window.console = console
  return true
}

// 全局变量，记录Web通知计数
var WebNotifycount = 0

function _init_(sheet = '汽机') {
  /**
   * 初始化工作表，确保存在“数据整理”和“汽机”这两个sheet。且将当前激活的sheet切换至“汽机”，同时，扫描“数据整理”sheet中的测点信息，并记录。
   * 如果不存在“数据整理”sheet，则会提示错误，如果不存在“汽机”sheet，则会自动创建。
   *
   * @type {Et.EtWorkbook}
   */
  let doc = window.Application.ActiveWorkbook
  if (!doc) {
    alert('当前没有打开任何文档')
    return
  }
  // console.log(Application)
  if (!SystemDemo.createTurbineSheet('汽机')) {
    return false
  }
  SystemDemo.activate_sheet('汽机')
  SystemDemo.refreshTestPoints()
}

/**
 * Ribbon按钮点击事件处理函数
 * @param {object} control - 被点击的控件对象
 * @returns {boolean} 总是返回true表示处理成功
 *
 * 功能说明：
 * 1. 根据控件ID执行不同操作
 * 2. 管理任务窗格的显示/隐藏
 */
function OnAction(control) {
  const eleId = control.Id
  switch (eleId) {
    case 'btnShowMsg': {
      // 获取或创建任务窗格
      let tsId = Number(window.Application.PluginStorage.getItem('taskPane_id'))
      window.Application.ShowDialog(Util.GetUrlPath() + '/taskPane', '测试标题', 1000, 600, true)

      if (!tsId) {
        // 首次点击时创建新任务窗格
        let taskPane = window.Application.CreateTaskPane(Util.GetUrlPath() + '/taskPane')
        let id = taskPane.ID
        window.Application.PluginStorage.setItem('taskPane_id', id)
        taskPane.Visible = true
      } else {
        // 已有任务窗格时切换显示状态
        let taskPane = window.Application.GetTaskPane(tsId)
        taskPane.Visible = !taskPane.Visible
      }
    }
      break
    case 'btnReheat': {
      console.log('二次再热按钮点击')
      let tsId = Number(window.Application.PluginStorage.getItem('taskPane_Reheat'))
      if (!tsId) {
        // 首次点击时创建新任务窗格
        let taskPane = window.Application.CreateTaskPane(Util.GetUrlPath() + '/taskPane_Reheat')
        let id = taskPane.ID
        window.Application.PluginStorage.setItem('taskPane_Reheat', id)
        taskPane.Visible = true
      } else {
        // 已有任务窗格时切换显示状态
        let taskPane = window.Application.GetTaskPane(tsId)
        taskPane.Visible = !taskPane.Visible
      }
    }
      break
    case 'btnCCPP':
      console.log('联合循环计算')
      let tsId = Number(window.Application.PluginStorage.getItem('taskPane_CCPP'))
      if (!tsId) {
        // 首次点击时创建新任务窗格
        let taskPane = window.Application.CreateTaskPane(Util.GetUrlPath() + '/taskPane_CCPP')
        // taskPane.Width=800
        let id = taskPane.ID
        window.Application.PluginStorage.setItem('taskPane_CCPP', id)
        taskPane.Visible = !taskPane.Visible
      } else {
        // 已有任务窗格时切换显示状态
        let taskPane = window.Application.GetTaskPane(tsId)
        taskPane.Visible = !taskPane.Visible
      }
      break
    case 'btnCalcTurbine': {
      console.log('汽机计算按钮点击')
      _init_('汽机')  // 确保存在“数据整理”，创建”汽机“工作簿，并激活”汽机“工作簿
      let row = SystemDemo.getLastRowIndexOfSheet()
      init_turbine()
    }

    default:
      break
  }
  return true
}

function GetImage(control) {
  const eleId = control.Id
  switch (eleId) {
    case 'btnShowMsg':
      return 'images/1.svg'
    case 'btnShowDialog':
      return 'images/2.svg'
    case 'btnShowTaskPane':
      return 'images/3.svg'
    default:
  }
  return 'images/newFromTemp.svg'
}

function OnNewDocumentApiEvent(doc) {
  alert('新建文件事件响应，取文件名: ' + doc.Name)
}

//这些函数是给wps客户端调用的
export default {
  OnAddinLoad, OnAction, GetImage, OnNewDocumentApiEvent
}
